/********************************************************/
/*                                                      */
/*         CLASS ColorPickerPlugginWebSafe              */
/*------------------------------------------------------*/
/*  Dépendances:                                        */
/*      -colorPickerPluggin.websafe.local.<lang>.js     */
/*      -colorPickerPluggin.websafe.global.js           */
/*                                                      */
/*------------------------------------------------------*/
/*       Par MaX3315                                    */
/*       http://codessources.votre-web.com              */
/********************************************************/
function ColorPickerPlugginWebSafe()
{
	this.name=CP_PLUGGIN_WEBSAFE_name;
	this.codeName='websafe';
	this.id=uniqueIDInDOM();
	this.versionColorPickerNeeded='1.0';
	this.uniqueRegistration=true;
	this.iconWarning='images/warning_websafe_15_18.gif';
	
	//definition du type de pluggin
	this.needWarning=true;			//indique si ce pluggin nécessite une zone de warning  (utiliser pas ColorPicker.registerPluggin()
	this.assignedWarningId=0;		//numéro de warning 0 à 3 possible, assigne par ColorPicker.registerPluggin() si needWarning==true
	this.needSelectorEntry=true;	//indique si ce pluggin définit un selecteur
	this.interceptRefreshColor=true;//indique si ce pluggin doit traiter this.interceptRefreshColor
	
	this.colorPicker=null; 	//Référence au color picker ayant enregistre ce pluggin
	
	//spécifique a ce pluggin
	this.refreshColorThread=null;	//id du thread de refresh color
	
	//interface
	this.injectHTML=CP_PLUGGIN_WEBSAFE_injectHTML;
	this.init=CP_PLUGGIN_WEBSAFE_init;
	this.refreshCurrentColor=CP_PLUGGIN_WEBSAFE_refreshCurrentColor;
	this.showSelector=CP_PLUGGIN_WEBSAFE_showSelector;
	this.hideSelector=CP_PLUGGIN_WEBSAFE_hideSlector;
}

/*************************************************/
/*                                               */
/*       Méthode privées du pluggin websafe      */
/*                                               */
/* Par commodité j'ai indéxer toutes les méthodes*/
/*  par CP_PLUGGIN_WEBSAFE                       */
/*************************************************/

//méthode d'initialisation du pluggin
function CP_PLUGGIN_WEBSAFE_init() { /* rien a faire pour ce pluggin */ }

//méthode traitant le changement de couleur
function CP_PLUGGIN_WEBSAFE_refreshCurrentColor()
{
	/*
	    Cette fonction m'hérite une petite explication
		car à première vue elle peut sembler abérente.
		
		En effet pourquoi je n'est pas directement tester si il s'giat d'une couleur websafe ici...
		et modifié le warning en conséquence.
		
		En fait il faut savoir que cette fonction et appelé en quasi continue lors du drag. Le test CP_PLUGGIN_WEBSAFE_isWebSafeColor
		étant assez coûteux j'ia décidé de mettre en place cette retenu dont le principe ets assez simple.
		
		on appel la fontion de traitement avec un setTimeout une sorte de thread qui débutera dans x milisencondes.
		Or a chaque appel de cette fonction je détruit le thread précédent et le remplace par un nouveau.
		
		Conclusion, temps que la sourie ne fais pas une pause assez longue le traitement ne se fait pas.
	*/
	if(this.refreshColorThread!=null) { clearTimeout(this.refreshColorThread); }
	this.refreshColorThread=window.setTimeout("CP_PLUGGIN_WEBSAFE_isWebSafeThread('"+this.colorPicker.id+"',"+this.assignedWarningId+",'"+this.iconWarning+"');",CP_PLUGGIN_WEBSAFE_REFRESH_THREAD_DECAY);
}


//fonction traitant effectivement le changement de couleur appeler par la fonction si dessous
//après une pause dans le changement de couleur
function CP_PLUGGIN_WEBSAFE_isWebSafeThread(colorPickerId,assignedWarningId,iconPath)
{
	var colorPicker=CP_findColorPickerById(colorPickerId);
	var current=colorPicker.get('hex');
	var test=CP_PLUGGIN_WEBSAFE_isWebSafeColor(current);

	var cell=document.getElementById(colorPicker.id+'_Warning'+assignedWarningId+'Td');
	
	if(test[0])  //c'est bien une couleur web protége
	{
		cell.innerHTML='&nbsp;';		//on enlève le warning
		cell.style.backgroundColor='';
	}
	else
	{
		cell.style.backgroundColor=test[1];  //on affiche la couleur protég en fond
		cell.innerHTML='<img id="'+colorPicker.id+'_webSafeReload_'+assignedWarningId+'_'+test[1]+'" src="'+iconPath+'" title="'+CP_PLUGGIN_WEBSAFE_reload_message+' : '+test[1]+' ('+CP_PLUGGIN_WEBSAFE_reload_double_clic+')" border="0" style="cursor:pointer;" onDblClick="CP_PLUGGIN_WEBSAFE_CLICK(event);">'; //on ajoute l'icone de warning et l'action dessus
	}
}

//affiche la palette websafe
function CP_PLUGGIN_WEBSAFE_showSelector()
{
	if(this.needSelectorEntry) { document.getElementById(this.colorPicker.id+'_pluggin_selector_'+this.id).style.display='block'; }
}

//masque la palette websafe
function CP_PLUGGIN_WEBSAFE_hideSlector()
{
	if(this.needSelectorEntry) { document.getElementById(this.colorPicker.id+'_pluggin_selector_'+this.id).style.display='none'; }
}

//injection de code html supplémentaire nécessaire à ce pluggins
function CP_PLUGGIN_WEBSAFE_injectHTML()
{
	if(this.needSelectorEntry)
	{
		//on ajoute un div contenant le palette
		var html=CP_PLUGGIN_WEBSAFE_generateWebSafePalette(this.colorPicker.id);
		document.body.innerHTML+='<div id="'+this.colorPicker.id+'_pluggin_selector_'+this.id+'" style="position:absolute; left:'+this.colorPicker.xDecal+'; top:'+this.colorPicker.yDecal+'; width:286px; height:256px; z-index:50; background-color:'+CP_PLUGGIN_WEBSAFE_BG_SELECTOR_PALETTE+'; display:none;">'+html+'</div>';
		
		//on ajoute une entree au selecteur de palette
		var selector=document.getElementById(this.colorPicker.id+'_paletteSelector');
		selector.options[selector.options.length]=new Option(this.name,this.codeName,false,false);
	}
}
